package base;

/**
 * Clase que representa una dirección postal.
 * @author Efren
 * @since 14/02/2012
 */
public class Direccion {
    private String idDireccion;
    private String tipoVia;
    private String nombreDireccion;
    private int numero;
    private String escalera;
    private int piso;
    private String letra;
    private String codigoPostal;
    private String municipio;

    public String getTipoVia() {
        return tipoVia;
    }

    public void setTipoVia(String tipoVia) {
        this.tipoVia = tipoVia;
    }

    public String getNombreDireccion() {
        return nombreDireccion;
    }

    public void setNombreDireccion(String nombreDireccion) {
        this.nombreDireccion = nombreDireccion;
    }

    public int getNumero() {
        return numero;
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }

    public String getEscalera() {
        return escalera;
    }

    public void setEscalera(String escalera) {
        this.escalera = escalera;
    }

    public int getPiso() {
        return piso;
    }

    public void setPiso(int piso) {
        this.piso = piso;
    }

    public String getLetra() {
        return letra;
    }

    public void setLetra(String letra) {
        this.letra = letra;
    }

    public String getCodigoPostal() {
        return codigoPostal;
    }

    public void setCodigoPostal(String codigoPostal) {
        this.codigoPostal = codigoPostal;
    }

    public String getMunicipio() {
        return municipio;
    }

    public void setMunicipio(String municipio) {
        this.municipio = municipio;
    }
    public void setIdDireccion(String id){
        this.idDireccion = id;
    }
    public String getIdDireccion(){return this.idDireccion;}
    
    @Override
    public String toString() {
        StringBuilder direccion = new StringBuilder();
        direccion.append(tipoVia==null?"":tipoVia).append(" ");
        direccion.append(nombreDireccion==null?"":nombreDireccion).append(" ");
        direccion.append(this.numero).append(" ");
        if (piso!=0){
            direccion.append(this.piso).append(" ");
            if (this.letra!=null){
                direccion.append(this.letra).append(" ");
            }else {
                direccion.append(this.escalera==null? "":this.escalera );
            }
        }
        return direccion.toString();
    }
    @Override
    public boolean equals(Object o) {
        Direccion direccion = (Direccion) o;
        //Si no es igual a menos uno entonces tiene un id valido.
        if ((direccion.getIdDireccion() != null)&& (this.idDireccion != null)){
            //Comparamos por ids
            if (direccion.getIdDireccion()==this.idDireccion){
                return true;
            }
        }else {
            if (direccion.getTipoVia().equalsIgnoreCase(this.tipoVia)){
                if (direccion.getNombreDireccion().equalsIgnoreCase(this.nombreDireccion)){
                    if (direccion.getNumero() == this.numero){
                        if (direccion.getEscalera().equalsIgnoreCase(this.escalera)){
                            if (direccion.getPiso()==this.piso){
                                if (direccion.getLetra().equalsIgnoreCase(this.letra)){
                                    if (direccion.getCodigoPostal().equalsIgnoreCase(this.codigoPostal)){
                                        if (direccion.getMunicipio().equalsIgnoreCase(this.municipio)){
                                            return true;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }return false;
    }

}
